////// sorting functions ///////

function sizechart(x){return sizelist.indexOf("," + String(x) + ",");}

function numsubstr(fs){
	var not_done = true;
	var i=1;
	var t=fs.charAt(0);
	while ((not_done) && (fs.length >= i)){
		if (isNaN(t+fs.charAt(i))){not_done = false;}else{t=t+fs.charAt(i);}
		i++;
	}
	if (isNaN(t)){t=0;}  //if, for some reason, there is no integer at all, make it a zero.
	return t;
}

function smart_sort(a,b){
	var inda=sizelist.indexOf(","+a+",");
	var indb=sizelist.indexOf(","+b+",");
	if ((inda >= 0) || (indb >= 0)){
		if((inda >= 0) && (indb >= 0)){
			if (sizechart(a)>=sizechart(b)){return 1;}else{return -1;}
		}else{
			if(inda >= 0){
				if(isNaN(b)){return -1;}else{return 1;}
			}else{
				if(isNaN(a)){return 1;}else{return -1;}
			}
		}
	}else{
		if (isNaN(a) || isNaN(b)){
			if (a>=b){return 1;}else{return -1;}
		}else{
			if (parseInt(a)>=parseInt(b)){return 1;}else{return -1;}
		}
	}
}
function smart_sort2(a,b){
	var inda=sizelist.indexOf(","+a.value+",");
	var indb=sizelist.indexOf(","+b.value+",");
	if ((inda >= 0) || (indb >= 0)){
		if((inda >= 0) && (indb >= 0)){
			if (sizechart(a.value)>=sizechart(b.value)){return 1;}else{return -1;}
		}else{
			if(inda >= 0){
				if(isNaN(b.value)){return -1;}else{return 1;}
			}else{
				if(isNaN(a.value)){return 1;}else{return -1;}
			}
		}
	}else{
		if (isNaN(a) || isNaN(b)){
			if (a>=b){return 1;}else{return -1;}
		}else{
			if (parseInt(a)>=parseInt(b)){return 1;}else{return -1;}
		}
	}
}

function sizechart_sort(r,s){if (sizechart(r)>=sizechart(s)){return 1;}else{return -1;}}
function sizechart_sort2(r,s){if (sizechart(r.value)>=sizechart(s.value)){return 1;}else{return -1;}}

function float_sort(p,q){
	var flt1, flt2;
	if (isNaN(p)){flt1=numsubstr(p);}else{flt1=p;}
	if (isNaN(q)){flt2=numsubstr(q);}else{flt2=q;}
	if (parseFloat(flt1)>=parseFloat(flt2)){return 1;}else{return -1;}
}
function float_sort2(p,q){
	var flt1, flt2;
	if (isNaN(p.value)){flt1=numsubstr(p.value);}else{flt1=p.value;}
	if (isNaN(q.value)){flt2=numsubstr(q.value);}else{flt2=q.value;}
	if (parseFloat(flt1)>=parseFloat(flt2)){return 1;}else{return -1;}
}

function integer_sort(m,n){
	var int1, int2;
	if (isNaN(m)){int1=numsubstr(m);}else{int1=m;}
	if (isNaN(n)){int2=numsubstr(n);}else{int2=n;}
	if (parseInt(int1)>=parseInt(int2)){return 1;}else{return -1;}
}

function string_sort(j,k){if (j>=k){return 1;}else{return -1;}}
function string_sort2(j,k){if (j.value>=k.value){return 1;}else{return -1;}}

function gg_club_sort(a,b){
	var intval = 0;
	if(a.attr_value2==b.attr_value2){intval=string_sort(a.attr_value1,b.attr_value1);}else{intval=sizechart_sort(a.attr_value2,b.attr_value2);}
	return intval;
}

function gg_shoe_sort(a,b){
	var intval = 0;
	if(a.attr_value1==b.attr_value1){intval=string_sort(a.attr_value2,b.attr_value2);}else{intval=float_sort(a.attr_value1,b.attr_value1);}
	return intval;
}

function gg_card_sort(a,b){
	var intval = 0;
	intval=string_sort(a.attr_value1,b.attr_value1);
	return intval;
}

function gg_vcard_sort(a,b){
	var intval = 0;
	intval=integer_sort(a.attr_value1,b.attr_value1);
	return intval;
}

function gg_apparel_sort(a,b){
	var intval = 0;
	if(attr_label[0]=="Attribute"){
		intval=string_sort(a.attr_value1,b.attr_value1);
	}else{
		if(a.attr_value2==b.attr_value2){		
		  intval=sizechart_sort(a.attr_value1,b.attr_value1);
		}else{
		  intval=string_sort(a.attr_value2,b.attr_value2);
		}
	}
	return intval;
}

function gg_bag_sort(a,b){
	var intval = 0;
	if(a.attr_value2==b.attr_value2){intval=string_sort(a.attr_value1,b.attr_value1);}else{intval=string_sort(a.attr_value2,b.attr_value2);}
	return intval;
}

function gg_glove_sort(a,b){
	var intval = 0;
	if(a.attr_value2==b.attr_value2){intval=sizechart_sort(a.attr_value1,b.attr_value1);}else{intval=string_sort(a.attr_value2,b.attr_value2);}
	return intval;
}


function doTheSorting(whatArray)
{	
	if(porder_code.length>0)
    {
		var pc=porder_code.charAt(0);
		pc=pc.toLowerCase();
		switch (pc)
		{
			case "c":
			case "u":
				whatArray.sort(gg_club_sort);
				break;
			case "s":
				whatArray.sort(gg_shoe_sort);
				break;
			case "d":
				whatArray.sort(gg_card_sort);
				break;
			case "b":
				whatArray.sort(gg_bag_sort);
				break;
			case "g":
				whatArray.sort(gg_glove_sort);
				break;
			case "a":
				break;//don't sort
			case "w":
			case "m":
			case "r":
				whatArray.sort(gg_apparel_sort);
				break;
			default:
				whatArray.sort(smart_sort);
				break;
		}
	} else {
		/* There is no porder_code */
		whatArray.sort(smart_sort);
	}
}

/* This function sorts each option separately instead of sorting attr_value fields 
	Uses the sort functions -- not the sort2 functions
*/
function doTheSorting1(whatArray,whichAttr)
{
	if(porder_code.length>0)
    {
		var pc=porder_code.charAt(0);
		pc=pc.toLowerCase();
		switch (pc)
		{
			case "c":
			case "u":
				//attr1 - string sort
				//attr2 - size sort
				if(whichAttr == 1) {whatArray.sort(string_sort);}
				else if(whichAttr == 2) {whatArray.sort(sizechart_sort);}
				else {whatArray.sort(smart_sort);}
				//whatArray.sort(gg_club_sort);
				break;
			case "s":
				//attr1 - float sort 
				//attr2 - string sort
				if(whichAttr == 1) {whatArray.sort(float_sort);}
				else if(whichAttr == 2) {whatArray.sort(string_sort);}
				else {whatArray.sort(smart_sort);}
				//whatArray.sort(gg_shoe_sort);
				break;
			case "d":
				//attr1 - string sort
				if(whichAttr == 1) {whatArray.sort(string_sort);}
				else {whatArray.sort(smart_sort);}
				//whatArray.sort(gg_card_sort);
				break;
			case "b":
				//attr1 - string sort
				//att2 - string sort
				if(whichAttr == 1 || whichAttr == 2) {whatArray.sort(string_sort);}				
				else {whatArray.sort(smart_sort);}
				//whatArray.sort(gg_bag_sort);
				break;
			case "g":
				//attr1 - size sort
				//attr2 - string sort
				if(whichAttr == 1) {whatArray.sort(sizechart_sort);}
				else if(whichAttr == 2) {whatArray.sort(string_sort);}
				else {whatArray.sort(smart_sort);}
				//whatArray.sort(gg_glove_sort);
				break;
			case "a":
			case "w":
			case "m":
			case "r":
				//attr1 - string sort IF attr_label[0] == Attribute OR Color
				//attr1 - size sort !IF attr_label[0] == Attribute NOR Color
				//string sort If attr_label[0] == Animal
				//attr2 - string sort				
				if(whichAttr == 1 && (attr_label[whichAttr-1] == "Attribute" || attr_label[whichAttr-1] == "Color")) {whatArray.sort(string_sort);}
				else if(attr_label[whichAttr-1] == "Animal") {whatArray.sort(string_sort);}
				else if(whichAttr == 1 && (attr_label[whichAttr-1] != "Attribute" || attr_label[whichAttr-1] != "Color")) {whatArray.sort(sizechart_sort);}
				else if(whichAttr == 2) {whatArray.sort(string_sort);}
				else {whatArray.sort(smart_sort);}
				//whatArray.sort(gg_apparel_sort);
				break;
			default:
				whatArray.sort(smart_sort);
				//whatArray.sort(smart_sort);
				break;
		}
	} else {
		/* There is no porder_code */
		whatArray.sort(smart_sort);
	}
}

/* This function sorts each option separately instead of sorting attr_value fields 
	Uses the sort2 functions -- not the sort functions
*/
function doTheSorting2(whatArray,whichAttr)
{
	if(porder_code.length>0)
    {
		var pc=porder_code.charAt(0);
		pc=pc.toLowerCase();
		switch (pc)
		{
			case "c":
			case "u":
				//attr1 - string sort
				//attr2 - size sort
				if(whichAttr == 1) {whatArray.sort(string_sort2);}
				else if(whichAttr == 2) {whatArray.sort(sizechart_sort2);}
				else {whatArray.sort(smart_sort2);}
				//whatArray.sort(gg_club_sort);
				break;
			case "s":
				//attr1 - float sort 
				//attr2 - string sort
				if(whichAttr == 1) {whatArray.sort(float_sort2);}
				else if(whichAttr == 2) {whatArray.sort(string_sort2);}
				else {whatArray.sort(smart_sort2);}
				//whatArray.sort(gg_shoe_sort);
				break;
			case "d":
				//attr1 - string sort
				if(whichAttr == 1) {whatArray.sort(string_sort2);}				
				else {whatArray.sort(smart_sort2);}
				//whatArray.sort(gg_card_sort);
				break;
			case "b":
				//attr1 - string sort
				//att2 - string sort
				if(whichAttr == 1 || whichAttr == 2) {whatArray.sort(string_sort2);}				
				else {whatArray.sort(smart_sort2);}
				//whatArray.sort(gg_bag_sort);
				break;
			case "g":
				//attr1 - size sort
				//attr2 - string sort
				if(whichAttr == 1) {whatArray.sort(sizechart_sort2);}
				else if(whichAttr == 2) {whatArray.sort(string_sort2);}
				else {whatArray.sort(smart_sort2);}
				//whatArray.sort(gg_glove_sort);
				break;
			case "a":
			case "w":
			case "m":
			case "r":
				//attr1 - string sort IF attr_label[0] == Attribute OR Color
				//attr1 - size sort !IF attr_label[0] == Attribute NOR Color
				//attr2 - string sort				
				if(whichAttr == 1 && (attr_label[whichAttr-1] == "Attribute" || attr_label[whichAttr-1] == "Color")) {whatArray.sort(string_sort2);}
				else if(whichAttr == 1 && (attr_label[whichAttr-1] != "Attribute" || attr_label[whichAttr-1] != "Color")) {whatArray.sort(sizechart_sort2);}
				else if(whichAttr == 2) {whatArray.sort(string_sort2);}
				else {whatArray.sort(smart_sort2);}
				//whatArray.sort(gg_apparel_sort);
				break;
			default:
				whatArray.sort(smart_sort2);
				//whatArray.sort(smart_sort);
				break;
		}
	} else {
		/* There is no porder_code */
		whatArray.sort(smart_sort2);
	}
}

//////// END sorting functions ///////////