/* jQuery Cookie Plugin - http://plugins.jquery.com/project/cookie*/
jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}
var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}
expires='; expires='+date.toUTCString();}
var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}
return cookieValue;}};

/* jQuery JSON */
(function($){function toIntegersAtLease(n) {return n<10?'0'+n:n;}Date.prototype.toJSON=function(date) {return this.getUTCFullYear()+'-'+toIntegersAtLease(this.getUTCMonth())+'-'+toIntegersAtLease(this.getUTCDate());};var escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};$.quoteString=function(string)
{if(escapeable.test(string)){return'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==='string'){return c;}c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';}return'"'+string+'"';};$.toJSON=function(o,compact){var type=typeof(o);if(type=="undefined")return"undefined";else if(type=="number"||type=="boolean")return o+"";else if(o===null)return"null";if(type=="string"){return $.quoteString(o);}if(type=="object"&&typeof o.toJSON=="function")return o.toJSON(compact);if(type!="function"&&typeof(o.length)=="number"){var ret=[];for(var i=0;i<o.length;i++){ret.push($.toJSON(o[i],compact));}if(compact)return"["+ret.join(",")+"]";else return"["+ret.join(", ")+"]";}if(type=="function"){throw new TypeError("Unable to convert object of type 'function' to json.");}var ret=[];for(var k in o){var name;type=typeof(k);if(type=="number")name='"'+k+'"';else if(type=="string")name=$.quoteString(k);else continue;var val=$.toJSON(o[k],compact);if(typeof(val)!="string"){continue;}if(compact)ret.push(name+":"+val);else ret.push(name+": "+val);}return"{"+ret.join(", ")+"}";};$.compactJSON=function(o){return $.toJSON(o,true);};$.evalJSON=function(src){return eval("("+src+")");};$.secureEvalJSON=function(src){var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered))return eval("("+src+")");else throw new SyntaxError("Error parsing JSON, source is not valid.");};})(jQuery);

$(document).ready(function() {

	/* Option fields in search form */
    $(".option1").hover(function() {$('.option1 .alt').removeAttr("disabled"); $(".option1").fadeTo(50, 1);$('.option2 .alt').attr("disabled", true); $(".option2").fadeTo(50, 0.30);});
    $(".option2").hover(function() {$('.option2 .alt').removeAttr("disabled");$(".option2").fadeTo(50, 1);$('.option1 .alt').attr("disabled", true);$(".option1").fadeTo(50, 0.39);});
    $('.option2 .alt').attr("disabled", true);
    $(".option2").fadeTo("fast", 0.30);

    /* COLAPSE / SHOW Extended Search parameters*/
    function enableCollapser(containerId) {
        $(containerId + " ul.extra").hide();
        $(containerId + " .expand_btn").click(function() {
            if ($(containerId + " ul.extra").is(":hidden")) {
                $(containerId + " ul.extra").slideDown("slow");
                $(containerId + " .expand_btn").text("less options");
                $(containerId + " .expand_icn").css({ backgroundImage: "url('images/utils/less_icn.gif')" });
                return false;
            } else {
                $(containerId + " ul.extra").slideUp("fast");
                $(containerId + " .expand_btn").text("more options");
                $(containerId + " .expand_icn").css({ backgroundImage: "url('images/utils/more_icn.gif')" });
                return false;
            }
        });
    }

    enableCollapser("#search_looking");
    enableCollapser("#search_owner");
    enableCollapser("#post_request");

    $("li.serp_item a.collapse_btn").click(function() {
        if ($("#serp_sidebar li.amenities").is(":hidden")) {
            $("#serp_sidebar li.amenities").slideDown("slow");
            $('li.serp_item a.collapse_btn').css({ backgroundImage: "url('images/buttons/collapse_btn.png')" });
        } else {
            $("#serp_sidebar li.amenities").slideUp("fast");
            $('li.serp_item a.collapse_btn').css({ backgroundImage: "url('images/buttons/expand_serp_btn.png')" });
        }
    });

    /* Default form values */
	// CSS selector doesn't work eith this plugin
	$("#location").watermark({html:"Enter a location", inherit:['color','font-weight', 'font-size']});
	$("#location_O").watermark({html:"Enter a location", inherit:['color','font-weight', 'font-size']});
    
	/* Rounded corners*/
    $('.roundedTLRB').corner("10px");$('.roundedTLR').corner("tl tr 10px");$('.roundedTLB').corner("tl bl br 10px");$('.roundedTR').corner("tr 10px");$('.roundedTL').corner("tl 10px");

    /* Round buttons*/
    $('.roundedTLRB2').corner("10px");

    /* Top tabs visibility toggle */
    $('a.owner_tab').hover(function() {$('#search_owner').show();$('#search_looking').hide();$('li.owner').css({ backgroundColor: '#f25546' });$('li.looking').css({ backgroundColor: '#414141' });});
    $('a.looking_tab').hover(function() {$('#search_owner').hide();$('#search_looking').show();$('li.looking').css({ backgroundColor: '#f25546' });$('li.owner').css({ backgroundColor: '#414141' });});

    /* Table rows hover action */
    $("tr.result_list").hover(function() {$(this).addClass("trHover");$(this).find(".trButton").show();},function() {$(this).removeClass("trHover");$(this).find(".trButton").hide();});
    $("ul#search_results .actions").fadeTo("fast", 0.3);
    $("ul#search_results li").hover(function() {$(this).addClass("resultHover");$(this).find(".actions").fadeTo("fast", 1);},function() {$(this).removeClass("resultHover");$(this).find(".actions").fadeTo("fast", 0.30);});

	/* Enable Location search controls */
	var locationLookupUrl = applicationPath + '/Services/Location.svc/SearchLocation';
	$('#location').locationAutocomplete({locationLookupUrl: locationLookupUrl, mapContainerId: 'locationMap'});	
	$('#location_O').locationAutocomplete({locationLookupUrl: locationLookupUrl, mapContainerId: 'locationMap_O'});	
	
	/* Enable Sign Up control */
	registerControl = new register({
		requestUrl: applicationPath + '/Services/Account.asmx',
		successUrl: applicationPath + '/Content/Account/RegistrationComplete.aspx'
	});	
	
	/* Enable Login control*/
	loginControl = new login({
		requestUrl: applicationPath + '/Services/Account.asmx'
	});	
	
	/* Enable validators */
	$.fn.qtip.styles.validator = { // Last part is the name of the style
	   background: '#f25546',
	   color: '#ffffff',
	   tip: true,
	   border: {
		  width: 1,
		  radius: 3,
		  color: '#f25546'
	   },
	   name: 'red' // Inherit the rest of the attributes from the preset dark style
	}
	
    $.validator.addMethod("password", function(value, element) {
        return this.optional(element) || value.length >= 6 && /\d/.test(value) && /[a-z]/i.test(value);
    }, "Your password must be at least 6 characters long and contain at least one number and one character.");
	
    $.validator.setDefaults({
        debug: false,
        errorClass: "error",
        errorPlacement: function(error, element) {
            if (element[0].tip)
                $(element[0]).qtip("destroy");

            element[0].tip = element.qtip({
                content: error[0].innerHTML,
                style: {
                    name: "validator"
                },
                position: {
                    corner: {
                        tooltip: "leftMiddle",
                        target: "rightMiddle"
                    }
                },
                show: { effect: "fade", when: false, ready: true, delay: 200 },
                hide: false
            });

        },
        highlight: function(element, errorClass) { 
		},
        unhighlight: function(element, errorClass) {
            if (element.tip) {
                $(element).qtip("destroy");
            }
        },
        invalidHandler: function(e, validator) { },
        onkeyup: false,
        rules: {
			terms: "required"
		},
		messages: {
			terms: "You must accept BedBidder's terms and conditions"
		}
    });	
	
	$('form').each(function() { this.validator = $(this).validate() });

});

// Make search request
// 0 - search accomodation
// 1 - search accomodation request
function search(type) {
    var suffix = type == 0 ? '' : '_O'
    var parameters = [];

    // Location
    var parameter = '';
    if ($('#location' + suffix).val())
        parameters.push('loc=' + $('#location' + suffix).val());
    
    // Accomodation type
    parameter = '';
    $('input[type=checkbox]', $('#accomodationTypes' + suffix)).each(function() {
        if (this.checked) {
            if (parameter.length > 0)
                parameter += ',';
            parameter += this.value;
        }
    });
    if (parameter)
        parameters.push('type=' + parameter);
        
    // Date and nights
    var parent = type == 0 ? '#search_looking' : '#search_owner';
    if ($('.form_element.option1', $(parent)).css('opacity') == '1') {
        parameters.push('date=' + $('#checkIn1' + suffix).val());
        parameters.push('nights=' + $('#nights1' + suffix).val());
    }
    else {
        parameters.push('date=' + $('#checkIn2' + suffix).val());
        parameters.push('nights=' + $('#nights2' + suffix).val());
        parameters.push('approx=true'); 
    }
    
    // Guests
    parameters.push('guests=' + $('#guests' + suffix).val());

    // Additional parameters
    if ($('.form_zones.extra', $(parent)).css('display') == 'block') {
        
        // Price
        parameters.push('price=' + $('#price' + suffix).val());

        // Amenities
        parameter = '';
        $('input[type=checkbox]', $('#amenities' + suffix)).each(function() {
            if (this.checked) {
                if (parameter.length > 0)
                    parameter += ',';
                parameter += this.value;
            }
        });
        if (parameter)
            parameters.push('amenities=' + parameter);
    }
    
    // Concatenate parameters
    var query = '';
    for (var i = 0; i < parameters.length; i++) {
        if (i == 0)
            query += '?'
        else
            query += '&';

        query += parameters[i];
    }
    
    // Make request
    var location = applicationPath
            + '/search/'
            + (type == 0 ? 'accomodation/' : 'request/')
            + query;

    alert(location);
    //window.location = location;
}