/////////////////////////////////////////// AJAX Handler ///////////////////////////////////
function createHTTPHandler() {

    httphandler = false;
    /*@cc_on@*/
    /*@if (@_jscript_version >= 5)
    // JScript gies us Conditional compilation, we can cope with old IE versions
    // and security blocked creation of the objects

    try {
        httphandler = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
        try {
            httphandler = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            httphandler = false;
        }
    }
    @end@*/
    if (!httphandler && typeof XMLHttpRequest != 'undefined') {
        httphandler = new XMLHttpRequest();
    }

    return httphandler;
}

function loadAjaxPage(page) {

    var element = document.getElementById('content_center');
    var navigation = document.getElementById('navigation');

    element.innerHTML = "<i>Loading content</i> <img src='http://www.opzoeknaareenband.nl/images/ajax.gif'>";

    var XMLHTTPObject = createHTTPHandler();
    XMLHTTPObject.open('GET', 'http://www.opzoeknaareenband.nl/content/' + page + '.php', true);
    XMLHTTPObject.onreadystatechange = function() {
        if (XMLHTTPObject.readyState == 4) {
            if (dhtmlHistory.isFirstLoad()) {
                //			dhtmlHistory.add(page, "Hello World Data");
            }
            if (page !== '') {
                element.innerHTML = XMLHTTPObject.responseText;
            }
        }
    }

    XMLHTTPObject.setRequestHeader("Expires", "0");
    XMLHTTPObject.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    XMLHTTPObject.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2005 00:00:00 GMT");
    XMLHTTPObject.setRequestHeader("Pragma", "no-cache");

    XMLHTTPObject.send(null);

    switch (page) {
        case (page = 'links'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Links</span>";
            break;
        case (page = 'contact'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Contact</span>";
            break;
        case (page = 'wiezijnwij'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Wie zijn wij</span>";
            break;
        case (page = 'disclaimer'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Disclaimer</span>";
            break;
        case (page = 'privacypolicy'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Privacy Policy</span>";
            break;
        case (page = 'referenties'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Referenties</span>";
            break;
        case (page = 'affiliate'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Partnerprogramma</span>";
            break;
        case (page = 'faq'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Veel gestelde vragen</span>";
            break;
        case (page = 'bandlogin'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Band login</span>";
            break;
        case (page = 'bandaanmelden'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Band aanmelden</span>";
            break;
        case (page = 'uitgebreidzoeken'):
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Uitgebreid zoeken</span>";
            break;
        default:
            navigation.innerHTML = "<a href='index.php' class='navigation_link' />Home</a> -> <span class='navigation_link'>Band aanmelden</span>";
    }

    document.getElementById('paging').innerHTML = "";
}

function loadAjaxDetailPage(page, id, parameters, bandnaam, url) {

    var element = document.getElementById('detailcontent_content');
    element.innerHTML = "<i>Loading content</i> <img src='http://www.opzoeknaareenband.nl/images/ajax.gif'>";
    var navigation = document.getElementById('navigation');

    var root = "<a href='index.php' class='navigation_link' />Home</a> -> <a href='index.php?" + url + "' class='navigation_link' />" + urldecode(bandnaam) + "</a> -> ";

    if (typeof (parameters) == 'undefined') {
        parameters = 'band_id=' + id + '&timestamp=' + new Date().getTime();
    }
    else {
        parameters = 'band_id=' + id + '&timestamp=' + new Date().getTime() + '&' + parameters;
    }

    var XMLHTTPObject = createHTTPHandler();
    XMLHTTPObject.open('POST', 'http://www.opzoeknaareenband.nl/content/' + page + '.php', true);
    XMLHTTPObject.onreadystatechange = function() {
        if (XMLHTTPObject.readyState == 4) {
            if (dhtmlHistory.isFirstLoad()) {
                dhtmlHistory.add(page + '_' + id, "Hello World Data");
            }
            if (page !== '') {
                element.innerHTML = XMLHTTPObject.responseText;
                switch (page) {
                    case 'put_optie':
                        navigation.innerHTML = root + "Optie";
                        break;
                    case 'offerte':
                        navigation.innerHTML = root + "Offerte";
                        calcTotal();
                        break;
                    case 'checkbeschikbaarheid':
                        navigation.innerHTML = root + "Beschikbaarheid";
                        break;
                    case 'recensies':
                        navigation.innerHTML = root + "Recensies";
                        break;
                    case 'photo':
                        navigation.innerHTML = root + "Foto's";
                        start_slides();
                        break;
                    case 'audio':
                        navigation.innerHTML = root + "Muziek";
                        break;
                    case 'video':
                        navigation.innerHTML = root + "Video";
                        break;
                    case 'biografie2':
                        navigation.innerHTML = root + "Biografie";
                        break;
                    case 'bezetting':
                        navigation.innerHTML = root + "Bezetting";
                        break;
                    case 'setlist':
                        navigation.innerHTML = root + "Setlist";
                        break;
                    case 'agenda':
                        navigation.innerHTML = root + "Agenda";
                        break;
                    case 'recensie':
                        navigation.innerHTML = root + "Recensie";
                        break;
                    case 'tipfriend':
                        navigation.innerHTML = root + "Tip vriend";
                        break;
                }
            }
        }
    }
    XMLHTTPObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    XMLHTTPObject.setRequestHeader("Content-length", parameters.length);
//    XMLHTTPObject.setRequestHeader("Connection", "close");
    XMLHTTPObject.setRequestHeader("Cache-Control", "no-cache");
    XMLHTTPObject.setRequestHeader("X_USERAGENT", "MijnAjaxApplicatie");

    XMLHTTPObject.send(parameters);
}
function putRecensie() {

    if (CheckFormRecensie()) {

        // Form 1
        var band_id = document.getElementById('band_id');
        var naam = document.getElementById('naam');
        var email = document.getElementById('email');
        var toon_email = document.getElementById('toon_email');
        var dagrecensie = document.getElementById('dagrecensie');
        var maandrecensie = document.getElementById('maandrecensie');
        var jaarrecensie = document.getElementById('jaarrecensie');
        var recensie = document.getElementById('recensie');
        // Form 1
        var parID = 'band_id=' + band_id.value;
        var parNaam = 'naam=' + naam.value;
        var parEmail = 'email=' + email.value;
        var parToonEmail = 'toon_email=' + (toon_email.checked ? '1' : '0');
        var parDagRecensie = 'dag=' + dagrecensie.value;
        var parMaandRecensie = 'maand=' + maandrecensie.value;
        var parJaarRecensie = 'jaar=' + jaarrecensie.value;
        var parRecensie = 'recensie=' + recensie.value;

        var parameters = parID + '&' + parNaam + '&' + parEmail + '&' + parToonEmail + '&' + parDagRecensie + '&' + parMaandRecensie + '&' + parJaarRecensie + '&' + parRecensie;
        var XMLHTTPObject = createHTTPHandler();
        XMLHTTPObject.open('POST', 'http://www.opzoeknaareenband.nl/content/actions/recensie_new.php', true);
        XMLHTTPObject.onreadystatechange = function() {
            if (XMLHTTPObject.readyState == 4) {
                var check_result = XMLHTTPObject.responseText;
                if (check_result > 0) {
                    loadAjaxDetailPage('recensie_thankyou', band_id, 'recensie_id=' + check_result);
                }
                else {
                    alert(check_result);
                    //loadAjaxDetailPage('recensie_failure', band_id, 'failure_id=' + check_result);
                }
            }
        }
        XMLHTTPObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        XMLHTTPObject.setRequestHeader("Content-length", parameters.length);
        //    XMLHTTPObject.setRequestHeader("Connection", "close");
        XMLHTTPObject.setRequestHeader("Cache-Control", "no-cache");
        XMLHTTPObject.setRequestHeader("X_USERAGENT", "MijnAjaxApplicatie");

        XMLHTTPObject.send(parameters);
    }
}

////////////////////////////////////////// Global Functions ///////////////////////////////////////
function checkDate() {

    var dag = document.getElementById('dag').value;
    var maand = document.getElementById('maand').value;
    var jaar = document.getElementById('jaar').value;

    var selectedDay = new Date(jaar, maand - 1, dag, 0, 0, 0);

    var today = new Date();

    if (selectedDay <= today) {
        alert('Kies een datum in de toekomst.');
        return false;
    }
    else {
        return true;
    }
}

function ajaxCheckDatum(id) {

    var dagcheck = document.getElementById('dagcheck');
    var maandcheck = document.getElementById('maandcheck');
    var jaarcheck = document.getElementById('jaarcheck');

    var parID = 'id=' + id;
    var parDag = 'dag=' + dagcheck.value;
    var parMaand = 'maand=' + maandcheck.value;
    var parJaar = 'jaar=' + jaarcheck.value;

    var parameters = parID + '&' + parDag + '&' + parMaand + '&' + parJaar;

    var XMLHTTPObject = createHTTPHandler();
    XMLHTTPObject.open('POST', 'http://www.opzoeknaareenband.nl/include/ajax_checkdatum.php', true);
    XMLHTTPObject.onreadystatechange = function() {
        if (XMLHTTPObject.readyState == 4) {
            showResult(XMLHTTPObject.responseText);
        }
    }

    XMLHTTPObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    XMLHTTPObject.setRequestHeader("Content-length", parameters.length);
//    XMLHTTPObject.setRequestHeader("Connection", "close");
    XMLHTTPObject.setRequestHeader("Cache-Control", "no-cache");
    XMLHTTPObject.setRequestHeader("X_USERAGENT", "MijnAjaxApplicatie");

    XMLHTTPObject.send(parameters);
}

function getWindowWidth() {
   if (window.innerWidth) {
      return window.innerWidth;
   } else {
      return document.documentElement.clientWidth;
   }
}

function checkEmailAddress(field) {

	// Note: The next expression must be all on one line...
	//       allow no spaces, linefeeds, or carriage returns!
	var goodEmail = field.value.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\..{2,2}))$)\b/gi);

	if (!goodEmail) {
	   field.focus();
	   field.select();
	}
	return goodEmail;
}

// SlideShow
function start_show()
{
// Time is in seconds X 1000
setInterval("slideshow()", 5000);
}
function slideshow()
{
picture_num++;
if (picture_num == pictures.length)
{
picture_num = 0;
}
current_picture.src = pictures[picture_num];
document["rotating_picture"].src = current_picture.src;
}

function NavigateToPage(page) {
	window.location="/index.php?page=" + page;
}

// Check field functions

function FieldIsEmpty(field) {

	var isEmpty;

	isEmpty = field.value.match(/^$/);

	if (isEmpty) {
	   field.focus();
	   field.select();
	}
	return isEmpty;
}

function checkTelefoonnummer(field) {

	var is10Digit;

	is10Digit = field.value.match(/^[0-9]{10}|[0-9]{2}\-[0-9]{8}|[0-9]{3}\-[0-9]{7}|[0-9]{4}\-[0-9]{6}$/);

	if (!is10Digit) {
	   field.focus();
	   field.select();
	}

	return is10Digit;
}

function IsNumeric(field) {

	var isNumeric;

	isNumeric = field.value.search("[^0-9]") < 0;

	if (!isNumeric) {
	   field.focus();
	   field.select();
	}
	return isNumeric;
}

function checkPostcode(field) {

	var isPostcode;

	isPostcode = field.value.match(/^\d{4}[a-zA-Z]{2}$/) || field.value.match(/^\d{4} [a-zA-Z]{2}$/);

	if (!isPostcode) {
	   field.focus();
	   field.select();
	}
	return isPostcode;
}

function GetDayName(date) {
	
	var Days = new Array('zo','ma','di','wo', 'do','vr','za');
	return Days[today.getDay()];
	
}

function play(media){
	document.getElementById('mediaplayer1').innerHTML=
		'<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" type="application/x-oleobject" width="350" height="68" align="baseline" border="0" standby="Loading Microsoft® Windows® Media Player components..." id="mediaplayer1">'	+'<param name="filename" value="'+media+'">'
	+'<param name="ShowDisplay" value="0">'
	+'<param name="ShowControls" value="1">'
	+'<param name="ShowPositionControls" value="1">'
	+'<param name="ShowSelectionControls" value="1">'
	+'<param name="ShowTracker" value="1">'
	+'<param name="MovieWindowSize" value=0>'
	+'<param name="FullScreenMode" value="0">'
	+'<param name="MovieWindowWidth" value="0">'
	+'<param name="MovieWindowHeight" value="0">'
	+'<param name="AutoStart" value="1">'
	+'<param name="AutoRewind" value="1">'
	+'<param name="PlayCount" value="1">'
	+'<param name="SelectionStart" value="0">'
	+'<param name="Appearance" value="1">'
	+'<param name="BorderStyle" value="0">'
	+'<param name="ShowStatusBar" value="1">'
	+'<param name="DisplayMode" value="0">'
	+'<param name="volume" value="-1">'
	+'<embed src="' + media + '" width="350" height="68" autostart="1" volume=-1 loop="0" ShowStatusBar=1 type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/download/default.asp" controller="true" filename="' + media + '" showdisplay="0" showcontrols="1" showpositioncontrols="1" showselectioncontrols="1" showtracker="1" moviewindowsize="0" fullscreenmode="0" moviewindowwidth="0" moviewindowheight="0" autorewind="1" playcount="1" selectionstart="0" appearance="0" borderstyle="0" displaymode="0" ></embed></object>'
}

function urldecode(str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir
    // %          note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    // *     example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'

    if (str !== undefined) {
        var histogram = {};
        var ret = str.toString();

        var replacer = function(search, replace, str) {
            var tmp_arr = [];
            tmp_arr = str.split(search);
            return tmp_arr.join(replace);
        };

        // The histogram is identical to the one in urlencode.
        histogram["'"] = '%27';
        histogram['('] = '%28';
        histogram[')'] = '%29';
        histogram['*'] = '%2A';
        histogram['~'] = '%7E';
        histogram['!'] = '%21';
        histogram['%20'] = '+';

        for (replace in histogram) {
            search = histogram[replace]; // Switch order when decoding
            ret = replacer(search, replace, ret) // Custom replace. No regexing   
        }

        // End with decodeURIComponent, which most resembles PHP's encoding functions
        ret = decodeURIComponent(ret);

        return ret;
    }
}

//JSON
window.dhtmlHistory={isIE:false,isOpera:false,isSafari:false,isKonquerer:false,isGecko:false,isSupported:false,create:function(_1){var _2=this;var UA=navigator.userAgent.toLowerCase();var _4=navigator.platform.toLowerCase();var _5=navigator.vendor||"";if(_5==="KDE"){this.isKonqueror=true;this.isSupported=false;}else{if(typeof window.opera!=="undefined"){this.isOpera=true;this.isSupported=true;}else{if(typeof document.all!=="undefined"){this.isIE=true;this.isSupported=true;}else{if(_5.indexOf("Apple Computer, Inc.")>-1){this.isSafari=true;this.isSupported=(_4.indexOf("mac")>-1);}else{if(UA.indexOf("gecko")!=-1){this.isGecko=true;this.isSupported=true;}}}}}window.historyStorage.setup(_1);if(this.isSafari){this.createSafari();}else{if(this.isOpera){this.createOpera();}}var _6=this.getCurrentLocation();this.currentLocation=_6;if(this.isIE){this.createIE(_6);}var _7=function(){_2.firstLoad=null;};this.addEventListener(window,"unload",_7);if(this.isIE){this.ignoreLocationChange=true;}else{if(!historyStorage.hasKey(this.PAGELOADEDSTRING)){this.ignoreLocationChange=true;this.firstLoad=true;historyStorage.put(this.PAGELOADEDSTRING,true);}else{this.ignoreLocationChange=false;this.fireOnNewListener=true;}}var _8=function(){_2.checkLocation();};setInterval(_8,100);},initialize:function(){if(this.isIE){if(!historyStorage.hasKey(this.PAGELOADEDSTRING)){this.fireOnNewListener=false;this.firstLoad=true;historyStorage.put(this.PAGELOADEDSTRING,true);}else{this.fireOnNewListener=true;this.firstLoad=false;}}},addListener:function(_9){this.listener=_9;if(this.fireOnNewListener){this.fireHistoryEvent(this.currentLocation);this.fireOnNewListener=false;}},addEventListener:function(o,e,l){if(o.addEventListener){o.addEventListener(e,l,false);}else{if(o.attachEvent){o.attachEvent("on"+e,function(){l(window.event);});}}},add:function(_d,_e){if(this.isSafari){_d=this.removeHash(_d);historyStorage.put(_d,_e);this.currentLocation=_d;window.location.hash=_d;this.putSafariState(_d);}else{var _f=this;var _10=function(){if(_f.currentWaitTime>0){_f.currentWaitTime=_f.currentWaitTime-_f.waitTime;}_d=_f.removeHash(_d);if(document.getElementById(_d)&&_f.debugMode){var e="Exception: History locations can not have the same value as _any_ IDs that might be in the document,"+" due to a bug in IE; please ask the developer to choose a history location that does not match any HTML"+" IDs in this document. The following ID is already taken and cannot be a location: "+_d;throw new Error(e);}historyStorage.put(_d,_e);_f.ignoreLocationChange=true;_f.ieAtomicLocationChange=true;_f.currentLocation=_d;window.location.hash=_d;if(_f.isIE){_f.iframe.src="blank.html?"+_d;}_f.ieAtomicLocationChange=false;};window.setTimeout(_10,this.currentWaitTime);this.currentWaitTime=this.currentWaitTime+this.waitTime;}},isFirstLoad:function(){return this.firstLoad;},getVersion:function(){return "0.6";},getCurrentLocation:function(){var r=(this.isSafari?this.getSafariState():this.getCurrentHash());return r;},getCurrentHash:function(){var r=window.location.href;var i=r.indexOf("#");return (i>=0?r.substr(i+1):"");},PAGELOADEDSTRING:"DhtmlHistory_pageLoaded",listener:null,waitTime:200,currentWaitTime:0,currentLocation:null,iframe:null,safariHistoryStartPoint:null,safariStack:null,safariLength:null,ignoreLocationChange:null,fireOnNewListener:null,firstLoad:null,ieAtomicLocationChange:null,createIE:function(_15){this.waitTime=400;var _16=(historyStorage.debugMode?"width: 800px;height:80px;border:1px solid black;":historyStorage.hideStyles);var _17="rshHistoryFrame";var _18="<iframe frameborder=\"0\" id=\""+_17+"\" style=\""+_16+"\" src=\"blank.html?"+_15+"\"></iframe>";document.write(_18);this.iframe=document.getElementById(_17);},createOpera:function(){this.waitTime=400;var _19="<img src=\"javascript:location.href='javascript:dhtmlHistory.checkLocation();';\" style=\""+historyStorage.hideStyles+"\" />";document.write(_19);},createSafari:function(){var _1a="rshSafariForm";var _1b="rshSafariStack";var _1c="rshSafariLength";var _1d=historyStorage.debugMode?historyStorage.showStyles:historyStorage.hideStyles;var _1e=(historyStorage.debugMode?"width:800px;height:20px;border:1px solid black;margin:0;padding:0;":historyStorage.hideStyles);var _1f="<form id=\""+_1a+"\" style=\""+_1d+"\">"+"<input type=\"text\" style=\""+_1e+"\" id=\""+_1b+"\" value=\"[]\"/>"+"<input type=\"text\" style=\""+_1e+"\" id=\""+_1c+"\" value=\"\"/>"+"</form>";document.write(_1f);this.safariStack=document.getElementById(_1b);this.safariLength=document.getElementById(_1c);if(!historyStorage.hasKey(this.PAGELOADEDSTRING)){this.safariHistoryStartPoint=history.length;this.safariLength.value=this.safariHistoryStartPoint;}else{this.safariHistoryStartPoint=this.safariLength.value;}},getSafariStack:function(){var r=this.safariStack.value;return historyStorage.fromJSON(r);},getSafariState:function(){var _21=this.getSafariStack();var _22=_21[history.length-this.safariHistoryStartPoint-1];return _22;},putSafariState:function(_23){var _24=this.getSafariStack();_24[history.length-this.safariHistoryStartPoint]=_23;this.safariStack.value=historyStorage.toJSON(_24);},fireHistoryEvent:function(_25){var _26=historyStorage.get(_25);this.listener.call(null,_25,_26);},checkLocation:function(){if(!this.isIE&&this.ignoreLocationChange){this.ignoreLocationChange=false;return;}if(!this.isIE&&this.ieAtomicLocationChange){return;}var _27=this.getCurrentLocation();if(_27==this.currentLocation){return;}this.ieAtomicLocationChange=true;if(this.isIE&&this.getIframeHash()!=_27){this.iframe.src="blank.html?"+_27;}else{if(this.isIE){return;}}this.currentLocation=_27;this.ieAtomicLocationChange=false;this.fireHistoryEvent(_27);},getIframeHash:function(){var doc=this.iframe.contentWindow.document;var _29=String(doc.location.search);if(_29.length==1&&_29.charAt(0)=="?"){_29="";}else{if(_29.length>=2&&_29.charAt(0)=="?"){_29=_29.substring(1);}}return _29;},removeHash:function(_2a){var r;if(_2a===null||_2a===undefined){r=null;}else{if(_2a===""){r="";}else{if(_2a.length==1&&_2a.charAt(0)=="#"){r="";}else{if(_2a.length>1&&_2a.charAt(0)=="#"){r=_2a.substring(1);}else{r=_2a;}}}}return r;},iframeLoaded:function(_2c){if(this.ignoreLocationChange){this.ignoreLocationChange=false;return;}var _2d=String(_2c.search);if(_2d.length==1&&_2d.charAt(0)=="?"){_2d="";}else{if(_2d.length>=2&&_2d.charAt(0)=="?"){_2d=_2d.substring(1);}}window.location.hash=_2d;this.fireHistoryEvent(_2d);}};window.historyStorage={setup:function(_2e){if(typeof _2e!=="undefined"){if(_2e.debugMode){this.debugMode=_2e.debugMode;}if(_2e.toJSON){this.toJSON=_2e.toJSON;}if(_2e.fromJSON){this.fromJSON=_2e.fromJSON;}}var _2f="rshStorageForm";var _30="rshStorageField";var _31=this.debugMode?historyStorage.showStyles:historyStorage.hideStyles;var _32=(historyStorage.debugMode?"width: 800px;height:80px;border:1px solid black;":historyStorage.hideStyles);var _33="<form id=\""+_2f+"\" style=\""+_31+"\">"+"<textarea id=\""+_30+"\" style=\""+_32+"\"></textarea>"+"</form>";document.write(_33);this.storageField=document.getElementById(_30);if(typeof window.opera!=="undefined"){this.storageField.focus();}},put:function(key,_35){this.assertValidKey(key);if(this.hasKey(key)){this.remove(key);}this.storageHash[key]=_35;this.saveHashTable();},get:function(key){this.assertValidKey(key);this.loadHashTable();var _37=this.storageHash[key];if(_37===undefined){_37=null;}return _37;},remove:function(key){this.assertValidKey(key);this.loadHashTable();delete this.storageHash[key];this.saveHashTable();},reset:function(){this.storageField.value="";this.storageHash={};},hasKey:function(key){this.assertValidKey(key);this.loadHashTable();return (typeof this.storageHash[key]!=="undefined");},isValidKey:function(key){return (typeof key==="string");},showStyles:"border:0;margin:0;padding:0;",hideStyles:"left:-1000px;top:-1000px;width:1px;height:1px;border:0;position:absolute;",debugMode:false,storageHash:{},hashLoaded:false,storageField:null,assertValidKey:function(key){var _3c=this.isValidKey(key);if(!_3c&&this.debugMode){throw new Error("Please provide a valid key for window.historyStorage. Invalid key = "+key+".");}},loadHashTable:function(){if(!this.hashLoaded){var _3d=this.storageField.value;if(_3d!==""&&_3d!==null){this.storageHash=this.fromJSON(_3d);this.hashLoaded=true;}}},saveHashTable:function(){this.loadHashTable();var _3e=this.toJSON(this.storageHash);this.storageField.value=_3e;},toJSON:function(o){return o.toJSONString();},fromJSON:function(s){return s.parseJSON();}};
Array.prototype.______array = '______array'; var JSON = { org: 'http://www.JSON.org', copyright: '(c)2005 JSON.org', license: 'http://www.crockford.com/JSON/license.html', stringify: function(arg) { var c, i, l, s = '', v; switch (typeof arg) { case 'object': if (arg) { if (arg.______array == '______array') { for (i = 0; i < arg.length; ++i) { v = this.stringify(arg[i]); if (s) { s += ',' } s += v } return '[' + s + ']' } else if (typeof arg.toString != 'undefined') { for (i in arg) { v = arg[i]; if (typeof v != 'undefined' && typeof v != 'function') { v = this.stringify(v); if (s) { s += ',' } s += this.stringify(i) + ':' + v } } return '{' + s + '}' } } return 'null'; case 'number': return isFinite(arg) ? String(arg) : 'null'; case 'string': l = arg.length; s = '"'; for (i = 0; i < l; i += 1) { c = arg.charAt(i); if (c >= ' ') { if (c == '\\' || c == '"') { s += '\\' } s += c } else { switch (c) { case '\b': s += '\\b'; break; case '\f': s += '\\f'; break; case '\n': s += '\\n'; break; case '\r': s += '\\r'; break; case '\t': s += '\\t'; break; default: c = c.charCodeAt(); s += '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16) } } } return s + '"'; case 'boolean': return String(arg); default: return 'null' } }, parse: function(text) { var at = 0; var ch = ' '; function error(m) { throw { name: 'JSONError', message: m, at: at - 1, text: text} } function next() { ch = text.charAt(at); at += 1; return ch } function white() { while (ch != '' && ch <= ' ') { next() } } function str() { var i, s = '', t, u; if (ch == '"') { outer: while (next()) { if (ch == '"') { next(); return s } else if (ch == '\\') { switch (next()) { case 'b': s += '\b'; break; case 'f': s += '\f'; break; case 'n': s += '\n'; break; case 'r': s += '\r'; break; case 't': s += '\t'; break; case 'u': u = 0; for (i = 0; i < 4; i += 1) { t = parseInt(next(), 16); if (!isFinite(t)) { break outer } u = u * 16 + t } s += String.fromCharCode(u); break; default: s += ch } } else { s += ch } } } error("Bad string") } function arr() { var a = []; if (ch == '[') { next(); white(); if (ch == ']') { next(); return a } while (ch) { a.push(val()); white(); if (ch == ']') { next(); return a } else if (ch != ',') { break } next(); white() } } error("Bad array") } function obj() { var k, o = {}; if (ch == '{') { next(); white(); if (ch == '}') { next(); return o } while (ch) { k = str(); white(); if (ch != ':') { break } next(); o[k] = val(); white(); if (ch == '}') { next(); return o } else if (ch != ',') { break } next(); white() } } error("Bad object") } function num() { var n = '', v; if (ch == '-') { n = '-'; next() } while (ch >= '0' && ch <= '9') { n += ch; next() } if (ch == '.') { n += '.'; while (next() && ch >= '0' && ch <= '9') { n += ch } } if (ch == 'e' || ch == 'E') { n += 'e'; next(); if (ch == '-' || ch == '+') { n += ch; next() } while (ch >= '0' && ch <= '9') { n += ch; next() } } v = +n; if (!isFinite(v)) { error("Bad number") } else { return v } } function word() { switch (ch) { case 't': if (next() == 'r' && next() == 'u' && next() == 'e') { next(); return true } break; case 'f': if (next() == 'a' && next() == 'l' && next() == 's' && next() == 'e') { next(); return false } break; case 'n': if (next() == 'u' && next() == 'l' && next() == 'l') { next(); return null } break } error("Syntax error") } function val() { white(); switch (ch) { case '{': return obj(); case '[': return arr(); case '"': return str(); case '-': return num(); default: return ch >= '0' && ch <= '9' ? num() : word() } } return val() } };