// JavaScript Document
var objCart, shirtid, shirtsize, shirtnumber;

/**
* Unserializes a PHP serialized data type. Currently handles:
*  o Strings
*  o Integers
*  o Doubles
*  o Arrays
*  o Booleans
*  o NULL
*  o Objects
* 
* alert()s will be thrown if the function is passed something it
* can't handle or incorrect data.
*
* @param  string input The serialized PHP data
* @return mixed        The resulting datatype
*/
function PHP_Unserialize(input)
{
	//alert(input);
	var result = PHP_Unserialize_(input);
	return result[0];
}


/**
* Function which performs the actual unserializing
*
* @param string input Input to parse
*/
function PHP_Unserialize_(input)
{
	var length = 0;
	//alert(input.charAt(0));
	switch (input.charAt(0)) {
		/**
		* Array
		*/
		case 'a':
			length = PHP_Unserialize_GetLength(input);
			input  = input.substr(String(length).length + 4);

			var arr   = new Array();
			var key   = null;
			var value = null;

			for (var i=0; i<length; ++i) {
				key   = PHP_Unserialize_(input);
				input = key[1];

				value = PHP_Unserialize_(input);
				input = value[1];

				arr[key[0]] = value[0];
			}

			input = input.substr(1);
			return [arr, input];
			break;
		
		/**
		* Objects
		*/
		case 'O':
			length = PHP_Unserialize_GetLength(input);
			var classname = String(input.substr(String(length).length + 4, length));
			
			input  = input.substr(String(length).length + 6 + length);
			var numProperties = Number(input.substring(0, input.indexOf(':')))
			input = input.substr(String(numProperties).length + 2);

			var obj      = new Object();
			var property = null;
			var value    = null;

			for (var i=0; i<numProperties; ++i) {
				key   = PHP_Unserialize_(input);
				input = key[1];
				
				// Handle private/protected
				key[0] = key[0].replace(new RegExp('^\x00' + classname + '\x00'), '');
				key[0] = key[0].replace(new RegExp('^\x00\\*\x00'), '');

				value = PHP_Unserialize_(input);
				input = value[1];

				obj[key[0]] = value[0];
			}

			input = input.substr(1);
			return [obj, input];
			break;

		/**
		* Strings
		*/
		case 's':
			length = PHP_Unserialize_GetLength(input);
			return [String(input.substr(String(length).length + 4, length)), input.substr(String(length).length + 6 + length)];
			break;

		/**
		* Integers and doubles
		*/
		case 'i':
		case 'd':
			var num = Number(input.substring(2, input.indexOf(';')));
			return [num, input.substr(String(num).length + 3)];
			break;
		
		/**
		* Booleans
		*/
		case 'b':
			var bool = (input.substr(2, 1) == 1);
			return [bool, input.substr(4)];
			break;
		
		/**
		* Null
		*/
		case 'N':
			return [null, input.substr(2)];
			break;

		/**
		* Unsupported
		*/
		case 'o':
		case 'r':
		case 'C':
		case 'R':
		case 'U':
			alert('Error: Unsupported PHP data type found!');

		/**
		* Error
		*/
		default:
			return [null, null];
			break;
	}
}


/**
* Returns length of strings/arrays etc
*
* @param string input Input to parse
*/
function PHP_Unserialize_GetLength(input)
{
	input = input.substring(2);
	var length = Number(input.substr(0, input.indexOf(':')));
	return length;
}

function serialize(mixed_value) {
    // http://kevin.vanzonneveld.net
    // +   original by: Arpad Ray (mailto:arpad@php.net)
    // %          note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
    // *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
    // *     returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
 
    var _getType = function(inp) {
        var type = typeof inp, match;
        if (type == 'object' && !inp) {
            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            if (match = cons.match(/(\w+)\(/)) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    
    var val;
    switch (type) {
        case "undefined":
            val = "N";
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");
            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":
            val = "s:" + mixed_value.length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":
            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
            var count = 0;
            var vals = "";
            var okey;
            for (key in mixed_value) {
                okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key);
                vals += serialize(okey) +
                        serialize(mixed_value[key]);
                count++;
            }
            val += ":" + count + ":{" + vals + "}";
            break;
    }
    if (type != "object" && type != "array") val += ";";
    return val;
}

function httpReq(){
	if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	return req;
}

/* this function will modified all cart content */
function refreshDataCart(contentFromServer){
	cartDataServer 	= jQuery("cartDataServer",contentFromServer).text();
	totalCartPrice 	= jQuery("totalCartPrice",contentFromServer).text();
	numberOfItem 	= jQuery("numberOfItem",contentFromServer).text();
	statusCart 		= jQuery("status",contentFromServer).text();
	//alert(cartDataServer);
	
	if (statusCart == 'empty') {
		// Do nothing
	} else { 
		jQuery('#dragshop').hide();
		/*jQuery('#dragdrop').css({position:'fixed',bottom:'0%',width:'100%'});*/
		jQuery('#dragdrop').show();
		jQuery('#dragshopelement').html(cartDataServer );		
	}
	
	jQuery("#totalPrice").html(totalCartPrice);
	jQuery('#cartItem').html(numberOfItem);
	if (numberOfItem > 0){
		jQuery('#dragshop').hide();
		jQuery('#dragdrop').show();	
	}
	else{
		jQuery('#dragshop').show();
		jQuery('#dragdrop').hide();		
	}
	scrollTheCart("",5);
	//updateItemAndPrice();	
	makeNiceTitles();
}
/* end function */
 
function checkingCart() {
	//objCart = new XMLHttpRequest();
	objCart = httpReq();
	objCart.onreadystatechange = checkShirt;
	objCart.open("GET", "http://www.choobenut.co.za/sessioncart.php", true);
	objCart.send(null);		
}

function checkShirt() {
	if (objCart.readyState == 4) {
		if (objCart.status == 200) {
			//var cart = objCart.responseText;
			refreshDataCart(objCart.responseXML);
		}
	}		
}

function removeCartItem(id) {
	//objCart = new XMLHttpRequest();
	objCart = httpReq();
	objCart.onreadystatechange = checkShirt;
	objCart.open("GET", "http://www.choobenut.co.za/sessioncart.php?act=remove&cartid="+id, true);
	objCart.send(null);	
}

function clearCart() {
	//objCart = new XMLHttpRequest();
	objCart = httpReq();
	objCart.onreadystatechange = checkShirt;
	objCart.open("GET", "http://www.choobenut.co.za/sessioncart.php?act=clear", true);
	objCart.send(null);		
}

function addToCart(id, size, number) {
	shirtid = id; shirtsize = size; shirtnumber = number;
	//objCart = new XMLHttpRequest();
	objCart = httpReq();
	objCart.onreadystatechange = addShirt;
	objCart.open("GET", "http://www.choobenut.co.za/sessioncart.php?act=add&id="+id+"&size="+size+"&number="+number, true);
	objCart.send(null);	
}

function addShirt() {
	if (objCart.readyState == 4) {
		if (objCart.status == 200) {
			//var contentFromServer = objCart.responseText;
			refreshDataCart(objCart.responseXML);			
		}
	}
} 

/* setting for dropping */
poof1 = new Image(64,64); poof1.src = "images/poof-1.gif";
if (typeof usingCart != 'undefined') {
	jQuery("<img>").attr("src", "imglib/asap.gif");
	jQuery.noConflict(); 
	jQuery(document).ready(function(){
		jQuery("#container,.tee_gl").droppable({
		accept: ".dhtml-carousel-item-4",
		activeClass: '',
		hoverClass: '',
		drop: function(e, ui) {
			var itemId = jQuery(ui.draggable).find('.id_shirt').val();
			removeCartItem(itemId);
			jQuery(ui.draggable).find('.image_cart_shop').attr({src: "imglib/asap.gif"});
			///alert(ui.draggable.children('.image_cart_shop').attr('src'));
			jQuery(ui.draggable).hide("slow");
			jQuery("#dhtml-carousel-item-"+itemId).remove();
			//scrollTheCart("",5);
			//jQuery(ui.draggable).remove();
		}
		});
		
		/* making draggable item */
		var oldCss = '';		
		jQuery('.tee_gl').draggable({revert:true,zIndex:999,helper:'clone',start:function(e,ui){
			var icon = jQuery(this).find('.iconshirt').val();
			var x = e.pageX - this.offsetLeft;
			var y = e.pageY - this.offsetTop;
			//jQuery(ui.helper).css("border",'solid 2px red');
			var oldWidth = jQuery(ui.helper).css("width");
			var oldHeight = jQuery(ui.helper).css("height");
			
			jQuery(ui.helper).css("width","120px");
			jQuery(ui.helper).css("height","120px");
			/*jQuery(ui.helper).css("border","red 2px solid");*/
			jQuery(ui.helper).css("margin-left",(x-30));
			jQuery(ui.helper).css("margin-top",(y-30));
			jQuery(ui.helper).html('<img src='+icon+'>');
			jQuery(ui.helper).removeClass('tee_gl');
			jQuery(ui.helper).addClass('tee_gl2');
		}});
		
		/*
		jQuery("#dragshop,#dragdrop").hover(function(){
			jQuery(this).css({'font-size':'16'})
		});*/
		
		jQuery("#dragshop,#dragdrop").droppable({
		accept: ".tee_gl",
		tolerance:'touch',
		activeclass: 'dragdrop-hover',
		hoverclass: 'dragdrop-hover',
		drop: function(e, ui) { 
			//alert('xxxxx');
			//alert(e.pageX +', '+ e.pageY);
			var id = jQuery(ui.draggable).find('.id_shirt').val(); 
			var size = jQuery('#shirtsize'+id).val();
			var number = jQuery('#shirtnumber'+id).val();
			objCart = httpReq();
			objCart.onreadystatechange = addShirt;
			objCart.open("GET", "http://www.choobenut.co.za/sessioncart.php?act=add&id="+id+"&size="+size+"&number="+number, true);
			objCart.send(null);
		}
		});
		
	});
}

/* setting for scrolling */
var startData = 0; 
var totalData = 0;
var moveFar   = 5;
function setTheScroll(dataTemp){
	jQuery('#tmpElement').html(dataTemp);
	jQuery('#tmpElement').find(".dhtml-carousel-item-4").draggable({revert:true});
}

function scrollTheCart(status,moveFar){
	var countData 	= 0;
	var contentData = 0;	
	var dataTemp 	= "";
	var statusScroll = false;
	if (status == "next"){	
		startData 	= startData+1;
	}else if (status == "prev"){	
		startData = startData-1;
		if (startData < 0){
			startData = 0;	
		}
	}
	else{
		startData = startData;
	}
	moveFar 	= moveFar + startData;
	
	jQuery('#dragshopelement').find('.dhtml-carousel-item-4').each(function(i) {
		countData++;
		if (startData < countData){
			dataTemp += '<div  style="width: 80px; height: 60px; float: left;" class="dhtml-carousel-item-4" >'+jQuery(this).html()+'</div>';
			jQuery(this).css('float','left');
			contentData++;
		}
		if( countData == moveFar){
			moveFar = countData; 
			setTheScroll(dataTemp);			
			statusScroll = true;
			return false;
		}
		
	});
	
	if (!statusScroll && contentData > 0){
		setTheScroll(dataTemp);			
		statusScroll = true;
	}
	else{
		if (contentData == 0 && status == 'next'){
			//clickEvent--;
		}
	}
}

function nextScroll(){
	 scrollTheCart("next",moveFar);
}

function prevScroll(){
	scrollTheCart("prev",moveFar);
}
