function $(id){return document.getElementById(id);}
function findParent(n,ln){
    while(n && (n.nodeType != 1 || n.localName.toLowerCase() != ln)) n = n.parentNode;
    return n;
}
addEventListener("load",initTravel,false);
function showMsg(msg,x){alert(msg);}
function storeCookie(n,v){
	var d = new Date();
    d.setDate(d.getDate()+10000);
	var e = "; expires="+d.toGMTString();
	document.cookie = n+"="+v+e+"; path=/";
}
function getCookie(n){
    var RE = "(?:; )?"+encodeURIComponent(n)+"=([^;]*);?";
    var reg = new RegExp(RE);
    if(reg.test(document.cookie)){return decodeURIComponent(RegExp["$1"]);}else{return null;}
}
function rmCook(n,id){
    var c = getCookie(n);
    if(c){
        var a = c.split('&');
        for(var i=0;i < a.length; i++)
            if(a[i].indexOf(id) > -1){
                a.splice(i,1);
                break;
            }
        c = a.join('&');
        storeCookie(n,c);
    }
}
function saveFave(n,v){
    var c = getCookie(n);
    if(c){
        if((c.length + v.length) > 4000){
            showMsg("You have exceeded your limit of Favorites.");
            return;
        }
        var i = v.substring(0,v.indexOf('!@'));
        if(c.indexOf(i) == -1){storeCookie(n,c+'&'+v);}
    }else{storeCookie(n,v);}
}
function buildFaves(){
    var ca = {a : [{c : getCookie("exphtl"),f : buildHtl,l : "hul"},{c : getCookie("expflt"),f : buildFlt,l : "ful"}]};
    for(var i=0;i < ca.a.length;i++)
        if(ca.a[i].c && ca.a[i].c.length > 0){
            //$(ca.a[i].l).innerHTML = "";
            var z = ca.a[i].c.split('&');
            for(var j=0;j < z.length;j++)
                ca.a[i].f(z[j]);
        }
}
function rmFav(e){
    if(this.id.indexOf("htl") > -1)
        removeHotel(this.id.substr(6));
    else
        removeFlt(this.id.substr(6));
}
function editFaves(){
    var f = $("faves");
    var a = f.getElementsByTagName("a");
    for(var i=0;i<a.length;i++){
        if(a[i].id != 'edfav'){
            if(a[i].className == "hidden")
                cssjs("r",a[i],"hidden");
            else
                cssjs("a",a[i],"hidden");
        }else{
            a[i].innerText = (a[i].innerText == "Edit")?"Done":"Edit";
        }
    }
}
function buildFlt(f){
    cssjs("a",$("noflt"),"hidden");
    // plus some other code
}
function removeFlight(id){
    rmCook("expflt",id);
}
function saveFlight(){
    // data should already be delimited, add to dom after storing
    saveFave("expflt", $("fltval").value);
    var ar = $("fltval").value.split('!@');
}
function buildHtl(h){
    cssjs("a",$("nohtl"),"hidden");
    var d = document;
    var ar = h.split('!@');
    var li = d.createElement('li');
    var va = d.createElement('a');
    var vt = d.createTextNode("Go");
    va.appendChild(vt);
    va.setAttribute("href","hts.php?cmd=htd&hotel="+ar[0]);
    //cssjs("a",va,"button");
    var da = d.createElement('a');
    var dt = d.createTextNode("Del");
    da.appendChild(dt);
    da.setAttribute("target","_self");
    da.setAttribute("id","exphtl"+ar[0]);
    li.setAttribute("id","l"+ar[0]);
    cssjs("a",da,"hidden");
    da.addEventListener("click",rmFav,false);
    var h = d.createElement('h4');
    var hn = d.createTextNode(ar[1]);
    h.appendChild(hn);
    var s = d.createElement('span');
    var cs = d.createTextNode(ar[2]+', '+ar[3]);
    s.appendChild(cs);
    li.appendChild(h);
    li.appendChild(s);
    li.appendChild(va);
    li.appendChild(da);
    $("hul").appendChild(li);
}
function removeHotel(id){
    rmCook("exphtl",id);
    var f = $("hul");
    var l = f.getElementsByTagName("li");
    for(var i=0;i<l.length;i++)
        if(l[i].id.indexOf(id) > -1){
            l[i].parentNode.removeChild(l[i]);
            break;
        }
    if(l.length == 1)
        cssjs("r",$("nohtl"),"hidden");
}
function saveHotel(){
    saveFave("exphtl",$("hotelval").value);
    buildHtl($("hotelval").value);
    showMsg("Hotel has been saved to My Favorites.");
}
function formatDate(dt){
    var m = dt.getMonth() + 1;
    var d = dt.getDate();
    m = (m < 10)? "0"+m: m;
    d = (d < 10)? "0"+d: d;
    return dt.getFullYear()+'-'+m+'-'+d;
}
function sortResults(r,c,s,u){
    var z = s.id;
    var f = getElementsByClass("active",$("sortul"),"a");
    toggleSubNav(f[0],s);
    var srt = [];
    var as = c.getElementsByTagName("a");
    for(var x=0;x < as.length;x++)
        if(as[x].id)
            srt.push(as[x].id);
    var col = srt.indexOf(z);
	if(c.reverseSort == null){c.reverseSort = [];}
	if(c.reverseSort[col] == null){
        if(z == "sortra"){c.reverseSort[col] = true;}
        else{c.reverseSort[col] = false;}
    }
	if(col == c.lastColumn){c.reverseSort[col] = !c.reverseSort[col];}
	c.lastColumn = col;
    var sTxt = function(a,b){
        var A = a.getElementsByTagName("span")[col].innerText;
        var B = b.getElementsByTagName("span")[col].innerText;
        var cmp = compVals(A,B);
        if(c.reverseSort[col]) cmp = -cmp;
        if(cmp == 0){
            var l = u.length;
            for(var i = 0;i < l;i++){
                var n = u[i];
                cmp = compVals(a.getElementsByTagName("span")[n].innerText,b.getElementsByTagName("span")[n].innerText);
                if(cmp != 0)
                    break;
            }
        }
        return cmp;
    };
    var lis = r.getElementsByTagName("li");
    var alis = [];
    for(var z = 0,l = lis.length;z < l;z++)
      alis.push(lis[z]);
    var slis = alis.sort(sTxt);
    r.innerHTML = "";
    for(var j = 0,m = slis.length;j < m;j++)
        r.appendChild(slis[j]);
}
function compVals(v, w) {
	var f,g;
	f = parseFloat(v);
	g = parseFloat(w);
	if(!isNaN(f) && !isNaN(g)){v = f;w = g;}
	if(v == w) return 0;
	if(v > w) return 1;
	return -1;
}
function getDetail(id){
    showLoading();
    var d = document.createElement('div');
    var showDetail = function(o){$("ldg").removeAttribute("selected");
                                 if(o.responseText.substr(0,1) == "0"){
                                     alert(o.responseText.substr(1));
                                     return;
                                 }
                                 d.innerHTML = o.responseText;
                                 if($("leg-nav") && $("leg-nav").childNodes.length > 1){
                                     var t = getElementsByClass("active",$("leg-nav"),"a")[0];
                                     var tid = t.id;
                                     var i = tid.substr(3,1);
                                     //i -= 1;
                                     $("legs").innerHTML = d.firstChild.innerHTML;
                                     var f = getElementsByClass("active",$("leg-nav"),"a")[0];
                                     if(f.id != tid){
                                         toggleSubNav(f,$(tid));
                                         for(var j=0;j<$('leg-nav').childNodes.length;j++)
                                             cssjs("a",$('leg'+j),"hidden");
                                         cssjs("r",$('leg'+i),"hidden");
                                     }
                                 }else{$("legs").innerHTML = d.firstChild.innerHTML;}
                                 eval(d.lastChild.innerHTML);
                                };
    ajax_req("get","fsd.php?cmd=fsd&route="+id,showDetail);
}
function detailBridge(){getDetail(route_id);}
function markRead(){
   var markDelegate = function(o){
        if(o.nodeName.toUpperCase() != 'A')
            o = o.firstChild;
        cssjs("r",o,"unread");
   };
    if($("blist")) $("blist").addEventListener("click",function(e){markDelegate(e.target);},false);
}
function getTravelDate(){
    var dt = new Date();
    var m = dt.getMonth() + 1;
    var d = dt.getDate();
    this.m = (m > 9)? m:"0" + m;
    this.d = (d > 9)? d:"0" + d;
    return this;
}
function initTravel(){
    //$("home").addEventListener("click",function(e){clickMenu(e);},true);
    //buildFaves();
    //$("edfav").addEventListener("click",editFaves,true);
}
function showState(c){
    switch(c.value){
    case "US":
        cssjs("r",$("hstrow"),"hidden");
        cssjs("a",$("capr"),"hidden");
        cssjs("r",$("usst"),"hidden");
        $("capr").value = "";
        break;
    case "CA":
        cssjs("r",$("hstrow"),"hidden");
        cssjs("r",$("capr"),"hidden");
        cssjs("a",$("usst"),"hidden");
        $("usst").value = "";
        break;
    default:
        cssjs("a",$("hstrow"),"hidden");
        $("usst").value = "";
        $("capr").value = "";
        break;
    }
}
function showLoading(){
    scrollTo(0,1);
    $("ldg").setAttribute("selected","true");
}
function toggleSubNav(f,t){
    cssjs("r",f,"active");
    cssjs("a",t,"active");
}
function toggleHandler(e,t){
    if(e.target.nodeName.toUpperCase() != 'A') return;
    var i = e.target.id;
    var f = getElementsByClass("active",t,"a")[0];
    var h = { "handlers" :
              { "sub-nav1" : {"fst1":"fstf1","fst2":"fstf2","cb":toggleFlt},
                "sub-nav" :  {"hts1":"htsf1","hts2":"htsf2","cb":toggleHtl},
                "sub-nav3" : {"htd1":"htdf1","htd2":"htdf2"},
                "leg-nav"  : {} }
            };
    if(t.id && t.id == "leg-nav")
        for(var j=0;j<t.childNodes.length;j++)
            h.handlers["leg-nav"]["ftd"+j] = "leg"+j;
    toggleSubNav(f,e.target);
    slideTab($(h.handlers[t.id][f.id]),$(h.handlers[t.id][i]));
    if(h.handlers[t.id]["cb"]) h.handlers[t.id]["cb"](e.target);
    e.stopPropagation();
}
function toggleFlt(t){
    $("fstyp").checked = (t.id == "fst1");
}
function toggleHtl(t){
    if(t && t.id && t.id == "hts1") cssjs("a",$("htsf3"),"hidden");
}
function handleClick(e){
    var el = e.target || e.srcElement;
    if(el.id && (el.id.indexOf("nxt") > -1 || el.id.indexOf("prv") > -1)){
        var f = $("img" + el.id.substr(4));
        if(el.id.indexOf("nxt") > -1) var t = $("img" + (parseInt(el.id.substr(4)) + 1));
        else  var t = $("img" + (parseInt(el.id.substr(4)) - 1));
        slideTab(f,t);
    }
    e.stopPropagation();
}
function slideTab(f,t)
{
    var ckt;
    var spd = 40;
    var it = 0;
    var a = t.getAttribute("axis");
    if(a == "y") t.style.top = "100%";
    else t.style.left = "100%";
    t.setAttribute("chosen","true");
    cssjs("a",f,"hidden");
    cssjs("r",t,"hidden");
    scrollTo(0,1);
    clearInterval(ckt);
    var p = 100;
    slide();
    var timer = setInterval(slide,it);
    function slide(){
        p -= spd;
        if(p <= 0){
            p = 0;
            f.removeAttribute("chosen");
            clearInterval(timer);
            scrollTo(0,1);
        }
        if(a == "y"){
            t.style.top = p + "%";
        }else{
            f.style.left = (p-100)+"%";
            t.style.left = p+"%";
        }
    }
}
function setFltDt(n){
    var dt = new Date();
    n = parseInt(n);
    dt.setDate(dt.getDate() + n);
    return formatDate(dt);
}
function getElementsByClass(srchCls,node,tag){
    var clsEls = [];
    if(node == null)
        node = document;
    if(tag == null)
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var l = els.length;
    var pattern = new RegExp("(^|\\s)" + srchCls + "(\\s|$)");
    for(var i = 0, j = 0; i < l; i++){
        if(pattern.test(els[i].className)){
            clsEls[j] = els[i];
            j++;
        }
    }
    return clsEls;
}
var ajax_req = function() {
    function getXHR () {
        return new XMLHttpRequest();
    };
    return function(method, uri, cb, postData) {
        var http = getXHR();
        http.onreadystatechange = function() {
            if (http && http.readyState == 4 && http.status == 200) {
                if (cb) { cb(http); }
            }
        };
        http.open(method, uri, true);
        http.send(postData || null);
        return http;
    };
}();
function loadCurrency(){
    var amt;
    var getRates = function(c1,c2,e){
        showLoading();
        var a = $("ccazip").value.replace(/,/g, "");
        var f = /^([\d]*)([\.]{0,1}[\d]*)$/;
        if(a.length > 0 && f.test(a)){
            amt = a;
            ajax_req("get","cc.php?cmd=ccexch&c1="+c1+"&c2="+c2,calc);
        }else {
            error();
        }
        return;
    };
    var error = function(){
        $("ldg").removeAttribute("selected");
        showMsg("Please enter a number.");
        cssjs("a",$("ccr"),"hidden");
    };
    var calc = function(o){
        $("ldg").removeAttribute("selected");
        if(o.responseText != 'error'){
            var cs = o.responseText.split('!@~');
            var fs = cs[0];
            var ts = cs[1];
            var c = $("cchs");
            cssjs("r",c,"hidden");
            c.focus();
            cssjs("a",c,"hidden");
            cssjs("a",$("ccr"),"hidden");
            var a = amt;
            if(a.length > 0 && ! isNaN(parseFloat(a))){
                var ft = fs / ts;
                var tf = ts / fs;
                c = a * ft;
                var d = a * tf;
                var i = $("ccfs").selectedIndex;
                var j = $("ccts").selectedIndex;
                var fa = [$("ccfs").options[i].text.substr(0,3),$("ccfs").options[i].text.substr(4)];
                var ta = [$("ccts").options[j].text.substr(0,3),$("ccts").options[j].text.substr(4)];
                $("ccf1").innerText = a + " " + fa[0];
                $("cct1").innerText = c.toFixed(2) + " " + ta[0];
                $("ccf2").innerText = fa[1];
                $("cct2").innerText = ta[1];
                $("ccf3").innerText = "1 " + fa[0] + " = " + ft.toFixed(3) + " " + ta[0];
                $("cct3").innerText = "1 " + ta[0] + " = " + tf.toFixed(3) + " " + fa[0];
                $("ccf4").innerText = a + " " + ta[0];
                $("cct4").innerText = d.toFixed(2) + " " + fa[0];
                cssjs("r",$("ccr"),"hidden");
            }else{
                error();
            }
        } else alert("There was an error retrieving the exchange rates.\nPlease try again later.");
    };
    $("cccl").addEventListener("submit",function(e){getRates($("ccfs").value,$("ccts").value);return;},true);
    $("ccc").addEventListener("click",function(e){getRates($("ccfs").value,$("ccts").value);return;},true);
}
function toggleMe(div){
    if(div){
        var id = div.getAttribute('id').substr(2);
        var s = div.getAttribute('toggled');
        if(id){
            var ckb = $("ck" + id);
            if(ckb)
                if(ckb.getAttribute('type') == 'checkbox')
                    ckb.checked = (s == 'true');
        }
    }
}
function addToggleEvent(){
    var t = getElementsByClass("toggle",document,"div");
    for(var i = 0;i < t.length;i++)
        t[i].addEventListener("click",function(e){toggleMe(this);},true);
}
function checkOrient(){
    var orient = (window.orientation == 0)? "profile" : "landscape";
    document.body.setAttribute("orient",orient);
    scrollTo(0,1);
}
function cssjs(a,o,c1,c2){
    switch(a){
    case 'a':
        if(!cssjs('c',o,c1)){o.className+=o.className?' '+c1:c1;}
        break;
    case 'r':
        var rep = o.className.match(' ' + c1)? ' ' + c1: c1;
        o.className=o.className.replace(rep,'');
        break;
    case 's':
        o.className=!cssjs('c',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
        break;
    case 'c':
        return new RegExp('\\b'+c1+'\\b').test(o.className);
        break;
    }
}
